<?php
/**
 * 仅供使用Smarty模板开发使用生成全网站静态
 */
require_once ("../../../init.php"); 

/**
 * 是否显示耗时信息 
 */
Gc::$dev_profile_on=true;
$html_dir=Gc::$nav_root_path."html".DIRECTORY_SEPARATOR;
UtilFileSystem::createDir($html_dir);
Gc::$url_base=UtilNet::urlbase();
/**
 * 是否输出返回静态页面信息 
 */
Dispatcher::$isOutputStatic=true;
/**
 * 是否在线优化:是否html文本压缩 
 */
Gc::$is_online_optimize=true;
define("html_dir",$html_dir);
define("execute", true);
$step=$_GET["step"];
$all=$_GET["all"];
if (empty($step)){
	$step=1;   
	$all=true;
}
$step=intval($step);
if (empty($all))$isall=false; else $isall=true;
if (($step!=1&&$isall)||($step==1)){
	if (Gc::$dev_profile_on)Profiler::mark("生成首页|二级页面");
	step1();
	if (Gc::$dev_profile_on)Profiler::unmark("生成首页|二级页面");
}
if (($step!=2&&$isall)||($step==2)){
	if (Gc::$dev_profile_on)Profiler::mark("生成商品分类页面");
	step2();
	if (Gc::$dev_profile_on)Profiler::unmark("生成商品分类页面");
}
if (($step!=3&&$isall)||($step==3)){
	if (Gc::$dev_profile_on)Profiler::mark("生成商品详情页面");
	step3();
	if (Gc::$dev_profile_on)Profiler::unmark("生成商品详情页面");
}
if (($step!=4&&$isall)||($step==4)){
	if (Gc::$dev_profile_on)Profiler::mark("生成品牌页面");
	step4();
	if (Gc::$dev_profile_on)Profiler::unmark("生成品牌页面");
}
if (($step!=5&&$isall)||($step==5)){
	if (Gc::$dev_profile_on)Profiler::mark("生成业务分类列表页面");
	step5();
	if (Gc::$dev_profile_on)Profiler::unmark("生成业务分类列表页面");
}
if (Gc::$dev_profile_on){
	//if (Gc::$dev_profile_on)Profiler::mark("生成业务分类列表页面");
	//echo "/".str_repeat("*",40).UtilDateTime::now().":生成品牌列表页面".str_repeat("*",40)."<br/>";
}

if (Gc::$dev_profile_on){
	//if (Gc::$dev_profile_on)Profiler::unmark("生成商品详情页面");
	Profiler::show();
}
echo "全部静态页面生成！";

/**
 * 第一步:生成首页|二级页面 
 */
function step1()
{
	if (Gc::$dev_profile_on)Profiler::init();  
	if (execute){
		echo "/".str_repeat("*",40).UtilDateTime::now().":生成首页|二级页面".str_repeat("*",40)."<br/>";
		createOneStaticHtmlPage("ele.index.index",html_dir."index.html");
		createOneStaticHtmlPage("ele.topbar.lists",html_dir."topbar.html");
		createOneStaticHtmlPage("ele.brand.discount",html_dir."discount.html");
		createOneStaticHtmlPage("ele.brand.features",html_dir."features.html");
		createOneStaticHtmlPage("ele.customize.lists",html_dir."customize.html");
		createOneStaticHtmlPage("ele.pbatch.lists",html_dir."pbatch.html");
		createOneStaticHtmlPage("ele.classicase.lists",html_dir."classicase.html");
	}
}

/**
 * 第二步:生成商品分类页面
 */
function step2()
{
	$ptype_ids=Ptype::select("ptype_id");
	$max=Ptype::max();
	if (execute){  
		echo "/".str_repeat("*",40).UtilDateTime::now().":生成商品分类页面".str_repeat("*",40)."<br/>";
		for ($ptype_id=1;$ptype_id<=$max;$ptype_id++)
		{  
			createOneStaticHtmlPage("ele.ptype.lists",html_dir."ptype_".$ptype_id.".html",array("ptype_id"=>$ptype_id));
			echo "/".str_repeat("*",40).UtilDateTime::now().":生成商品分类页面--ptype_".$ptype_id.".html".str_repeat("*",40)."<br/>";
		}
	}
}

/**
 * 第三步:生成商品详情页面
 */
function step3()
{
	$max=Product::max();
	if (execute){
		echo "/".str_repeat("*",40).UtilDateTime::now().":生成商品详情页面".str_repeat("*",40)."<br/>";
		for ($product_id=1;$product_id<=$max;$product_id++)
		{    
			createOneStaticHtmlPage("ele.product.view",html_dir."product_".$product_id.".html",array("product_id"=>$product_id));   
			echo "/".str_repeat("*",40).UtilDateTime::now().":生成商品详情页面--product_".$product_id.".html".str_repeat("*",40)."<br/>";
		} 
	} 
}

/**
 * 第四步:生成品牌页面
 */
function step4()
{
	$max=Brand::max();
	if (execute){
		echo "/".str_repeat("*",40).UtilDateTime::now().":生成品牌页面".str_repeat("*",40)."<br/>";
		for ($brand_id=1;$brand_id<=$max;$brand_id++)
		{
			createOneStaticHtmlPage("ele.brand.lists",html_dir."brand_".$brand_id.".html",array("brand_id"=>$brand_id));
		
			echo "/".str_repeat("*",40).UtilDateTime::now().":生成品牌页面--brand_".$brand_id.".html".str_repeat("*",40)."<br/>";
		}    
	}    
}

/**
 * 第五步:生成业务分类列表页面
 */
function step5()
{
	$max=12;//Btype::max();
	if (execute){
		echo "/".str_repeat("*",40).UtilDateTime::now().":生成业务分类列表页面".str_repeat("*",40)."<br/>";
		for ($btype_id=1;$btype_id<=$max;$btype_id++)
		{        
			createOneStaticHtmlPage("ele.btype.lists",html_dir."btype_".$btype_id.".html",array("btype_id"=>$btype_id));
			echo "/".str_repeat("*",40).UtilDateTime::now().":生成业务分类列表页面--btype_".$btype_id.".html".str_repeat("*",40)."<br/>";
			$sub_btytes=Btype::select("btype_id","parent_id=".$btype_id);
			$sub_btytes[]=0;
			foreach ($sub_btytes as $sub_btyte) {
				for($price_range=0;$price_range<=9;$price_range++){
					for($sorting=1;$sorting<=3;$sorting++){
						createOneStaticHtmlPage("ele.btype.lists",html_dir."btype_".$btype_id."_".$sub_btyte."_".$price_range."_".$sorting.".html",array("btype_id"=>$btype_id,"btype_cate_id"=>$sub_btyte,"price_range"=>$price_range,"sorting"=>$sorting));
						echo "/".str_repeat("*",40).UtilDateTime::now().":生成业务分类列表页面[btype_id:$btype_id,btype_cate_id:$sub_btyte,price_range:$price_range,sorting:$sorting]".str_repeat("*",40)."<br/>";                        
						$count=Pbtype::select("count(distinct product_id)","btype_parentid=".$btype_id);
						$pageSize=24;
						$allPageCount=floor(($count + $pageSize - 1) / $pageSize);//总页数
						for($pageNo=1;$pageNo<=$allPageCount;$pageNo++){
							createOneStaticHtmlPage("ele.btype.lists",html_dir."btype_".$btype_id."_".$sub_btyte."_".$price_range."_".$sorting."_".$pageNo.".html",array("btype_id"=>$btype_id,"btype_cate_id"=>$sub_btyte,"price_range"=>$price_range,"sorting"=>$sorting,"pageNo"=>$pageNo));
							echo "/".str_repeat("*",40).UtilDateTime::now().":生成业务分类列表页面[btype_id:$btype_id,btype_cate_id:$sub_btyte,price_range:$price_range,sorting:$sorting,pageNo:$pageNo]".str_repeat("*",40)."<br/>";      
						}
						for($orderby=0;$orderby<=1;$orderby++){
							createOneStaticHtmlPage("ele.btype.lists",html_dir."btype_".$btype_id."_".$sub_btyte."_".$price_range."_".$sorting."_".$orderby.".html",array("btype_id"=>$btype_id,"btype_cate_id"=>$sub_btyte,"price_range"=>$price_range,"sorting"=>$sorting,"orderby"=>$orderby));							
							echo "/".str_repeat("*",40).UtilDateTime::now().":生成业务分类列表页面[btype_id:$btype_id,btype_cate_id:$sub_btyte,price_range:$price_range,sorting:$sorting,pageNo:$pageNo,orderby:$orderby]".str_repeat("*",40)."<br/>";  
						}
					}
				}
			}
		}    
	} 
}

/**
 * 生成单个静态的页面 
 * @param mixed $go
 * @param mixed $htmlfilename
 */
function createOneStaticHtmlPage($go,$htmlfilename,$go_param=null)
{
	$htmlcontent=runphp($go,$go_param); 
	if ($htmlcontent){
		$htmlcontent=replaceProductDetailLink($htmlcontent);
		file_put_contents($htmlfilename,$htmlcontent);    
	}
}

/**
 * 替换商品详情链接
 */
function replaceProductDetailLink($content)
{
	if (!empty($content)){
		$content=preg_replace("/index.php[?]go=ele.product.view&product_id=(\d+)/i","html/product_\\1.html",$content);
		$content=preg_replace("/index.php[?]go=ele.ptype.lists&ptype_id=(\d+)/i","html/ptype_\\1.html?",$content);
		$content=preg_replace("/index.php[?]go=ele.brand.lists&brand_id=(\d+)/i","html/brand_\\1.html",$content);
		$content=preg_replace("/index.php[?]go=ele.btype.lists&btype_id=(\d+)&btype_cate_id=(\d+)&price_range=(\d+)&sorting=(\d+)&orderby=(\d+)/i","html/btype_\\1_\\2_\\3_\\4_o\\5.html",$content);
		$content=preg_replace("/index.php[?]go=ele.btype.lists&btype_id=(\d+)&btype_cate_id=(\d+)&price_range=(\d+)&sorting=(\d+)&pageNo=(\d+)/i","html/btype_\\1_\\2_\\3_\\4_p\\5.html",$content);
		$content=preg_replace("/index.php[?]go=ele.btype.lists&btype_id=(\d+)&btype_cate_id=(\d+)&price_range=(\d+)&sorting=(\d+)/i","html/btype_\\1_\\2_\\3_\\4.html",$content);
		$content=preg_replace("/index.php[?]go=ele.btype.lists&btype_id=(\d+)&sorting=(\d+)&orderby=(\d+)/i","html/btype_\\1_\\2_o\\3.html",$content);        
		$content=preg_replace("/index.php[?]go=ele.btype.lists&btype_id=(\d+)/i","html/btype_\\1.html",$content);
	}
	return $content;
}

/**
 * 运行动态php程序代码
 * @param mixed $go
 * @param mixed $pararm
 */
function runphp($go,$pararm=null)
{
	$_GET["go"]=$go;
	if (is_string($pararm)){
		$pararm=parse_str($pararm);
	}
	if (is_array($pararm)){
		foreach ($pararm as $key=>$value) {
			$_GET[$key]=$value;
		}
	}
	$result=Dispatcher::dispatch(new Router());
	if (!empty($result)){
		if (Gc::$is_online_optimize){
			if (contain($result,"<body")){
			   /************************start:整个Html页面去除注释，换行，空格********************/ 
				$result=preg_replace("/<\!--(.*?)-->/","",$result);//去掉html里的注释
				$result = preg_replace("~>\s+\n~",">",$result);   
				$result = preg_replace("~>\s+\r~",">",$result);
				$result = preg_replace("~>\s+<~","><",$result);              
				$result=str_replace("\r\n","",$result); 
			   /************************end  :整个Html页面去除注释，换行，空格********************/
			}                                    
		}    
	}
	return $result;
}
?>

<?php
/**
 * 传统的生成全静态网站页面策略:访问网站得到静态html页面另存为指定策略的静态网页文件 
 */
//require_once ("../../../init.php"); 
//$html_dir=Gc::$nav_root_path."html".DIRECTORY_SEPARATOR;
//UtilFileSystem::createDir($html_dir);
//$url_base=UtilNet::urlbase();
//echo "/".str_repeat("*",40)."start:生成首页".str_repeat("*",40)."<br/>";
//$htmlcontent=file_get_contents($url_base."index.php?go=ele.index.index");
//file_put_contents($html_dir."index.html",$htmlcontent);
//echo "/".str_repeat("*",40)."end  :生成首页".str_repeat("*",40)."<br/>";
//echo "/".str_repeat("*",40)."start:生成商品详情页面".str_repeat("*",40)."<br/>";
//for ($product_id=1;$product_id<610;$product_id++)
//{
//	$htmlcontent=file_get_contents($url_base."index.php?go=ele.product.view&product_id=".$product_id);
//	file_put_contents($html_dir."product_".$product_id.".html",$htmlcontent);
//}
//header("location:".$url_base."html/product_".$product_id.".html");  
//echo "/".str_repeat("*",40)."end  :生成商品详情页面".str_repeat("*",40)."<br/>";
?>